#include<bits/stdc++.h>
using namespace std;const int N=6e5+7;
vector<int>v[N];int n,m,as[N],T_T,x,y,i,j,vis[N];
void dfs(int x,int nw){
if(nw)as[x]=-1;else if(as[x]<2)as[x]++;vis[x]=1;
for(auto&y:v[x])if(as[y]!=-1){
if(vis[y])dfs(y,1);else if(as[y]!=2||as[y]==2&&nw)dfs(y,nw);
}
vis[x]=0;
}
int main(){
for(scanf("%d",&T_T);T_T--;){
for(scanf("%d%d",&n,&m),i=1;i<=m;++i)scanf("%d%d",&x,&y),v[x].push_back(y);
for(dfs(1,0),i=1;i<=n;++i)printf("%d%c",as[i],i==n?'\n':' '),v[i].clear(),vis[i]=as[i]=0;
}
}
983. Minimum Cost For Tickets | 973. K Closest Points to Origin |
969. Pancake Sorting | 967. Numbers With Same Consecutive Differences |
957. Prison Cells After N Days | 946. Validate Stack Sequences |
921. Minimum Add to Make Parentheses Valid | 881. Boats to Save People |
497. Random Point in Non-overlapping Rectangles | 528. Random Pick with Weight |
470. Implement Rand10() Using Rand7() | 866. Prime Palindrome |
1516A - Tit for Tat | 622. Design Circular Queue |
814. Binary Tree Pruning | 791. Custom Sort String |
787. Cheapest Flights Within K Stops | 779. K-th Symbol in Grammar |
701. Insert into a Binary Search Tree | 429. N-ary Tree Level Order Traversal |
739. Daily Temperatures | 647. Palindromic Substrings |
583. Delete Operation for Two Strings | 518. Coin Change 2 |
516. Longest Palindromic Subsequence | 468. Validate IP Address |
450. Delete Node in a BST | 445. Add Two Numbers II |
442. Find All Duplicates in an Array | 437. Path Sum III |